package _0219_._04_example.dao;

import _0219_._04_example.model.Product;
import _0219_._04_example.model.ProductData;

public class ProductDAOImpl implements ProductDAO {


    // 1. 获取所有非空的商品数据
    @Override
    public Product[] getAllProducts() {
        // return ProductData.allProducts;

        // 筛选掉为null的数据
        Product[] products = ProductData.allProducts;

        // 1. 先看一下数组中有多少个不为null的数据
        int count = 0;
        for (Product product : products) {
            if (product != null) {
                count++;
            }
        }

        // 2. 创建一个新的数组，用来保存所有的商品数据
        Product[] allProduct = new Product[count];
        int index = 0;
        for (Product product : products) {
            if (product != null) {
                allProduct[index++] = product;
            }
        }

        // 3. 返回
        return allProduct;
    }


    // 2.1  判断商品id是否存在
    @Override
    public boolean judgeIdExists(int id) {

        // 获取所有的商品数据
        Product[] products = ProductData.allProducts;

        // 循环遍历，判断传入的id和商品中的id是否相等
        for (int i = 0; i < products.length; i++) {
            if (products[i] != null) {
                int existsId = products[i].getId();

                // 如果相等，返回true
                if (existsId == id) {
                    return true;
                }
            }
        }

        // 如果没有，返回false
        return false;
    }

    @Override
    public boolean judgeIdExists(String productName) {
        // 获取所有的商品数据
        Product[] products = ProductData.allProducts;

        // 循环遍历，判断传入的id和商品中的id是否相等
        for (int i = 0; i < products.length; i++) {
            if (products[i] != null) {
                String existsName = products[i].getProductName();

                // 如果相等，返回true
                if (productName.equals(productName)) {
                    return true;
                }
            }
        }

        // 如果没有，返回false
        return false;
    }


    // 2.2 插入一个商品数据到数组中
    @Override
    public void insertProduct(Product product) {

        // 获取数组
        Product[] products = ProductData.allProducts;

        boolean flag = false;

        // 循环遍历数组
        for (int i = 0; i < products.length; i++) {
            if (products[i] == null) {

                // 插入数据到数组
                products[i] = product;

                // 更新标记
                flag = true;

                break;
            }
        }

        // 如果循环结束都没有插进去，创建新数组，然后插入
        if (!flag) {

            // 创建新数组
            Product[] newProducts = new Product[products.length + 1];

            // 给新数组遍历赋值
            for (int i = 0; i < products.length; i++) {
                newProducts[i] = products[i];
            }

            // 给最后一个位置赋值
            newProducts[newProducts.length - 1] = product;


            // 把改动更新 （数据库）
            ProductData.allProducts = newProducts;

        }


        // 输出一下数据库中最新的内容
        System.out.println("------------插入数据之后-----------");
        for (Product pro : ProductData.allProducts) {
            if (pro != null) {
                pro.print();
            }
        }

    }

    @Override
    public Product searchForProducts(int id) {
        // 获取数组
        Product[] products = ProductData.allProducts;
        // 循环遍历，找到对应的product
        for (int i = 0; i < products.length; i++) {
            if (products[i].getId() == id)
                return products[i];
        }
        return null;
    }

    @Override
    public Product searchForProducts(String productName) {
        // 获取数组
        Product[] products = ProductData.allProducts;
        // 循环遍历，找到对应的product
        for (int i = 0; i < products.length; i++) {
            if (products[i].getProductName().equals(productName))
                return products[i];
        }
        return null;
    }

    @Override
    public Product updateProducts(int id, String productName, double price, String describe) {
        // 获取数组
        Product[] products = ProductData.allProducts;
        // 循环遍历，找到对应的product
        for (int i = 0; i < products.length; i++) {
            if (products[i].getId() == id) {
                products[i].setProductName(productName);
                products[i].setPrice(price);
                products[i].setDescribe(describe);
                return products[i];
            }
        }
        return null;
    }

    @Override
    public boolean removeProduct(int id) {
        // 获取数组
        Product[] products = ProductData.allProducts;
        // 循环遍历，找到对应的product
        for (int i = 0; i < products.length; i++) {
            if (products[i].getId() == id) {
                products[i].setId(0);
                products[i].setProductName(null);
                products[i].setPrice(0);
                products[i].setDescribe(null);
                return true;
            }

        }
        return false;
    }
}
